package homework.week03;

/**
 * 200. 岛屿数量
 * https://leetcode-cn.com/problems/number-of-islands/
 */
public class LeetCode_200_501{
    public int numIslands(char[][] grid) {
        if(grid == null || grid.length == 0){
            return 0;
        }
        int nr = grid.length;
        int nc = grid[0].length;
        int nums_islands = 0;
        for(int r = 0;r < nr;++r){
            for(int c = 0;c < nc;++c){
                if(grid[r][c] == '1'){
                    ++ nums_islands;
                    dfs(grid, r, c);
                }
            }
        }
        return nums_islands;
    }

    public void dfs(char[][] grid,int r,int c){
        int nr = grid.length;
        int nc = grid[0].length;
        if(r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == '0'){
            return;
        }
        grid[r][c] = '0';
        dfs(grid,r - 1,c);
        dfs(grid,r + 1,c);
        dfs(grid,r,c - 1);
        dfs(grid,r,c + 1);
    }
}